// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: BUSL-1.1

package states

import (
	"github.com/hashicorp/terraform/internal/addrs"
	"github.com/zclconf/go-cty/cty"
)

// OutputValue represents the state of a particular output value.
//
// It is not valid to mutate an OutputValue object once it has been created.
// Instead, create an entirely new OutputValue to replace the previous one.
type OutputValue struct {
	Addr      addrs.AbsOutputValue
	Value     cty.Value
	Sensitive bool
}

func (o *OutputValue) Equal(other *OutputValue) bool {
	if o == other {
		return true
	}
	if o == nil || other == nil {
		return false
	}
	if !o.Addr.Equal(other.Addr) {
		return false
	}
	if o.Sensitive != other.Sensitive {
		return false
	}
	return o.Value.RawEquals(other.Value)
}
